/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.isd.pool.modelo;

import com.isd.venta.modelo.CondicionDePago;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

/**
 *
 * @author ctrosch
 */
@Entity
@Table(name = "USR_POOLCP")
@IdClass(CondicionesPagoPoolPK.class)
public class CondicionesPagoPool implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "USR_POOLCP_POOL_NRPOOL", nullable = false)
    private int nroPool;
    @Id
    @Column(name = "USR_POOLCP_NORDEN", nullable = false)
    private int orden;
    //Pool
    @ManyToOne
    @JoinColumn(name = "USR_POOLCP_POOL_NRPOOL", referencedColumnName = "USR_POOL_NRPOOL", nullable = false, insertable=false, updatable=false)
    private Pool pool;

    //Condicion de pago
    @JoinColumn(name = "USR_POOLCP_CNDPAG", referencedColumnName = "VTTCPH_CNDPAG", nullable = false)
    @ManyToOne(optional=false)
    private CondicionDePago condicionDePago;

    @Column(name = "USR_POOLCP_DESCRP", length=40)
    private String descripcion;

    @Column(name = "USR_POOLCP_PRCNOR", precision = 2, scale = 6)
    private BigDecimal precioNormal;

    @Column(name = "USR_POOLCP_PRCPOL", precision = 2, scale = 6)
    private BigDecimal precioPool;

    @Column(name = "USR_POOLCP_IVAPRD", precision = 6, scale = 2)
    private BigDecimal ivaProduto;

    @Lob
    @Column(name = "USR_POOLCP_OBSERV", length = 2147483647)
    private String observaciones;

    @Transient
    private boolean persistido;

    @Transient
    private BigDecimal precioNormalConIVA;

    @Transient
    private BigDecimal precioPoolConIVA;

    @Column(name = "USR_PO_FECALT")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fecalt;
    @Column(name = "USR_PO_FECMOD")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fecmod;
    @Column(name = "USR_PO_USERID")
    private String userid;
    @Column(name = "USR_PO_ULTOPR")
    private String ultopr;
    @Column(name = "USR_PO_DEBAJA")
    private String debaja;
    @Column(name = "USR_PO_OALIAS")
    private String oalias;


    public CondicionesPagoPool() {

        this.persistido = false;
        descripcion = "";
        observaciones = "";
        fecalt = new Date();
        fecmod = new Date();
        userid = "ADMIN";
        ultopr = "A";
        debaja = "N";
        oalias = "USR_POOLCP";
    }

    public CondicionesPagoPool(int nroPool, int orden) {
        this.nroPool = nroPool;
        this.orden = orden;
        this.persistido = false;

        descripcion = "";
        observaciones = "";
        fecalt = new Date();
        fecmod = new Date();
        userid = "ADMIN";
        ultopr = "A";
        debaja = "N";
        oalias = "USR_POOLCP";
    }

    public CondicionDePago getCondicionDePago() {
        return condicionDePago;
    }

    public void setCondicionDePago(CondicionDePago condicionDePago) {
        this.condicionDePago = condicionDePago;
    }

    public int getNroPool() {
        return nroPool;
    }

    public void setNroPool(int nroPool) {
        this.nroPool = nroPool;
    }

    public int getOrden() {
        return orden;
    }

    public void setOrden(int orden) {
        this.orden = orden;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }
    
    public Pool getPool() {
        return pool;
    }

    public void setPool(Pool pool) {
        this.pool = pool;
    }

    public boolean isPersistido() {
        return persistido;
    }

    public void setPersistido(boolean persistido) {
        this.persistido = persistido;
    }

    public BigDecimal getPrecioNormal() {
        return precioNormal;
    }

    public void setPrecioNormal(BigDecimal precioNormal) {
        this.precioNormal = precioNormal;
    }

    public BigDecimal getPrecioPool() {
        return precioPool;
    }

    public void setPrecioPool(BigDecimal precioPool) {
        this.precioPool = precioPool;
    }

    public BigDecimal getIvaProduto() {
        return ivaProduto;
    }

    public void setIvaProduto(BigDecimal ivaProduto) {
        this.ivaProduto = ivaProduto;
    }

    public BigDecimal getPrecioNormalConIVA() {
        try {
            if (precioNormal != null && ivaProduto != null) {
                precioNormalConIVA = precioNormal.add(((precioNormal.multiply(ivaProduto)).divide(new BigDecimal(100))));
            }
            return precioNormalConIVA;

        } catch (Exception e) {

            return BigDecimal.ZERO;
        }
    }

    public void setPrecioNormalConIVA(BigDecimal precioNormalConIVA) {
        this.precioNormalConIVA = precioNormalConIVA;
    }

    public BigDecimal getPrecioPoolConIVA() {
        try {
            if (precioPool != null && ivaProduto != null) {
                precioPoolConIVA = precioPool.add(((precioPool.multiply(ivaProduto)).divide(new BigDecimal(100))));
            }
            return precioPoolConIVA;

        } catch (Exception e) {

            return BigDecimal.ZERO;
        }
    }

    public void setPrecioPoolConIVA(BigDecimal precioPoolConIVA) {
        this.precioPoolConIVA = precioPoolConIVA;
    }

    public String getDebaja() {
        return debaja;
    }

    public void setDebaja(String debaja) {
        this.debaja = debaja;
    }

    public Date getFecalt() {
        return fecalt;
    }

    public void setFecalt(Date fecalt) {
        this.fecalt = fecalt;
    }

    public Date getFecmod() {
        return fecmod;
    }

    public void setFecmod(Date fecmod) {
        this.fecmod = fecmod;
    }

    public String getOalias() {
        return oalias;
    }

    public void setOalias(String oalias) {
        this.oalias = oalias;
    }

    public String getUltopr() {
        return ultopr;
    }

    public void setUltopr(String ultopr) {
        this.ultopr = ultopr;
    }

    public String getUserid() {
        return userid;
    }

    public void setUserid(String userid) {
        this.userid = userid;
    }

    public String getObservaciones() {
        return observaciones;
    }

    public void setObservaciones(String observaciones) {
        this.observaciones = observaciones;
    }
    
    
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final CondicionesPagoPool other = (CondicionesPagoPool) obj;
        if (this.nroPool != other.nroPool) {
            return false;
        }
        if (this.orden != other.orden) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 89 * hash + this.nroPool;
        hash = 89 * hash + this.orden;
        return hash;
    }

    @Override
    public String toString() {
        return "nroPool=" + nroPool + ",orden=" + orden ;
    }
    
}
